/**
 * 面试中的编程题 写一个函数
 * 传统的面向对象语言   实例
 * dog Object实例出来，原型链上
 * dog.__proto__ -> == b.prototype   b是a的原型对象
 * dog.__proto__.__proto__.__proto__... -> null
 * instanceof 传统语言中判断的是a是b的实例
 * js 中 instanceof 运算符用于判断构造函数的prototype属性是否出现在对象上的任何位置
 * 原型链上的方法
 * @func instanceof 实现
 * @params  a 对象  b 对象
 * @returns boolean
 */
function Cat(){

}
function Dog() { // 构造函数

}
 // 原型
Dog.prototype.sayHi = function() {
 
}
const dog = new Dog();
function myInstanceof(a,b) {
    // 原型
    let proto = Object.getPrototypeOf(a);
    let prototype = b.prototype;
    // if(proto == b.prototype) return true;
    // return false;
    while(true) {
        if (!proto) return false;  // null 到头，推出
        if (proto == prototype) return true; // while 退出
        console.log(proto);
        proto = Object.getPrototypeOf(proto); // 终点 null
        console.log(proto);
    }
    // console.log(proto == a.__proto__)
}

// console.log(myInstanceof(dog,Dog))
console.log(myInstanceof(dog,Object))
// console.log(myInstanceof(dog,Cat))

